package controller;

import java.io.File;

import javax.swing.JMenuItem;

import advance.GameMap;


import gui.MapEditorFrame;
import inputstream.FileObject;
/**rappresenta un controller che pilota un pulsante del menubar dell'applicazione il cui
 * scopo è quello di salvare. Una classe estendente questa classe astratta viene fornita
 * del metodo {@link #saveMap(File, GameMap)}, in grado di salvare una data mappa in un particolare file
 * 
 * @author koldar
 * @version 1.0
 */
public abstract class AbstractSaveMenuBarController extends MenuBarController implements SaveHandlerUser,ExtensionUser{
	
	public AbstractSaveMenuBarController(MapEditorFrame _frame,JMenuItem towire){
		super(_frame,towire);
	}
	
	/**il percorso assoluto richiesto in <tt>path</tt> è reperibile tramite il metodo File.getAbsolutePath()</tt>
	 * 
	 * @param path il percorso (assoluto) del file che si è scelto di usare (estensione inclusa o esclusa, è indifferente)
	 * @return il File avente come Name il nome specificato nel path compreso della estensione <tt>MAPEXTENSION</tt>
	 */
	protected static File getSaveableFile(String path){
		return new File(path.endsWith("."+MAPEXTENSION)?path:path+"."+MAPEXTENSION);
	}
	
	/**dato il path assoluto (ricavabile tramite File.getAbsolutePath()) salva la mappa su quel file.
	 * in caso di errore lo comunica all'utente
	 * 
	 * @param name il path assoluto del file in cui salvare
	 * @param map la mappa da salvare
	 */
	protected void saveMap(String name,GameMap map){
		this.saveHandler.setTheFile(getSaveableFile(name));
		this.saveHandler.SaveObject(map);
		//TODO inserire nell'editor un logPanel!!!
		if (this.saveHandler.getFileError()!=FileObject.NULL){
			Controller.log.setText("the file \""+this.saveHandler.getTheFile().getAbsolutePath()+"\" was not been saved. loading error #"+this.saveHandler.getFileError());
		}else{
			Controller.log.setText("  Your map has been successfully saved.");
		}
	}

}
